home *** CD-ROM | disk | FTP | other *** search
/ Amiga ISO Collection / AmigaUtilCD1.iso / Emulatoren / zxam20.lha / ZXAM Spectrum / ZXAM_Rexx / Español / LoadFile.zxam < prev    next >
Encoding:
Text File  |  1994-10-22  |  4.0 KB  |  113 lines

  1. /* Este script carga un snapshot de disco */
  2. /* Usa los conversores internos del emulador (MIRAGE y PC) */
  3.  
  4.     address command
  5.  
  6.     if ~show(ports,ZXAM_REXX) then do
  7.         requestchoice 'title "ZXAM Script error..." body "No encuentro el puerto del emulador!!" gadgets "AARGH!"'
  8.         exit
  9.         end
  10.  
  11. /* Usamos el requester del programa para cargar el fichero */
  12.     
  13.     oldname=zxamactname()        /* nombre actual */
  14.     oldformat=zxamactformat()    /* formato actual */
  15.     
  16.     nombre=zxamloadrequester('Elige programa Spectrum...')
  17.     if nombre='' then exit    /* selección cancelada */
  18.     
  19.     bloque=zxampploadfile(nombre)    /* cargamos TODO el fichero */
  20.     
  21.     formato=zxamparseloaded(bloque)        /* reconoce y carga el fichero */
  22.     
  23.     if formato~='' then do
  24.         zxamnameformat(zxamfilepart(nombre),formato)
  25.         exit
  26.         end
  27.     
  28. /* Yep! No es formato mirage ni pc. Aqui debemos poner el código para */
  29. /* reconocer los demás formatos */
  30.  
  31. /* este es simplemente un ejemplo, ya que intenta reconocer el formato MIRAGE */
  32. /* y cargarlo en memoria, colocando los registros adecuadamente */
  33. /* Para cualquier otro formato solo hay que modificar los offsets */
  34. /* para los registros y la memoria */
  35.     if length(bloque)=49179 then do        /* formato MIRAGE (creo...) */
  36.         zxamsetreg(i,c2d(substr(bloque,1,1)))    /* registro i */
  37.         zxamsetreg(lh2,c2d(substr(bloque,2,2)))    /* registro hl' */
  38.         zxamsetreg(ed2,c2d(substr(bloque,4,2)))    /* registro de' */
  39.         zxamsetreg(cb2,c2d(substr(bloque,6,2)))    /* registro bc' */
  40.         zxamsetreg(f2,c2d(substr(bloque,8,1)))    /* registro f' */
  41.         zxamsetreg(a2,c2d(substr(bloque,9,1)))    /* registro a' */
  42.         zxamsetreg(lh,c2d(substr(bloque,10,2)))    /* registro hl */
  43.         zxamsetreg(ed,c2d(substr(bloque,12,2)))    /* registro de */
  44.         zxamsetreg(cb,c2d(substr(bloque,14,2)))    /* registro bc */
  45.         zxamsetreg(yi,c2d(substr(bloque,16,2)))    /* registro iy */
  46.         zxamsetreg(xi,c2d(substr(bloque,18,2)))    /* registro ix */
  47.         zxamsetreg(int,bittst(substr(bloque,20,1),2)) /* estado interrupciones */
  48.         zxamsetreg(r,c2d(substr(bloque,21,1)))    /* registro r */
  49.         zxamsetreg(f,c2d(substr(bloque,22,1)))    /* registro f */
  50.         zxamsetreg(a,c2d(substr(bloque,23,1)))    /* registro a */
  51.         zxamsetreg(ps,c2d(substr(bloque,24,2)))    /* registro sp */
  52.         zxamsetreg(pc,zxamfindbyte(0,201))    /* dir de un RET en ROM */
  53.         zxamsetreg(im,c2d(substr(bloque,26,1)))    /* modo de interrupción */
  54.         zxamsetreg(bor,c2d(substr(bloque,27,1)))    /* color del borde */
  55.         /* colocamos los 48k de RAM */
  56.         zxamputmem(16384,substr(bloque,28,49152))
  57.         
  58.         /* ponemos en la ventana el nombre y el formato */
  59.         zxamnameformat(zxamfilepart(nombre),'mirage')
  60.         zxamnoreload()
  61.         
  62.         exit
  63.         
  64.         end
  65.  
  66.  
  67. /* este es otro ejemplo, que carga un fichero en formato PC */
  68.     if length(bloque)=49190 then do        /* formato PC?? */
  69.         if left(bloque,2)~='SP' then break    /* mismo tamaño pero sin ID! */
  70.         zxamsetreg(cb,c2d(substr(bloque,7,2)))
  71.         zxamsetreg(ed,c2d(substr(bloque,9,2)))
  72.         zxamsetreg(lh,c2d(substr(bloque,11,2)))
  73.         zxamsetreg(f,c2d(substr(bloque,13,1)))
  74.         zxamsetreg(a,c2d(substr(bloque,14,1)))
  75.         zxamsetreg(xi,c2d(substr(bloque,15,2)))
  76.         zxamsetreg(yi,c2d(substr(bloque,17,2)))
  77.         zxamsetreg(cb2,c2d(substr(bloque,19,2)))
  78.         zxamsetreg(ed2,c2d(substr(bloque,21,2)))
  79.         zxamsetreg(lh2,c2d(substr(bloque,23,2)))
  80.         zxamsetreg(f2,c2d(substr(bloque,25,1)))
  81.         zxamsetreg(a2,c2d(substr(bloque,26,1)))
  82.         zxamsetreg(r,c2d(substr(bloque,27,1)))
  83.         zxamsetreg(i,c2d(substr(bloque,28,1)))
  84.         zxamsetreg(ps,c2d(substr(bloque,29,2)))
  85.         zxamsetreg(cp,c2d(substr(bloque,31,2)))
  86.         zxamsetreg(bor,c2d(substr(bloque,35,1)))
  87.         zxamsetreg(int,bittst(substr(bloque,37,1),0))
  88.         zxamsetreg(im,1+bittst(substr(bloque,37,1),1))
  89.         /* colocamos los 48k de RAM */
  90.         zxamputmem(16384,substr(bloque,39,49152))
  91.         
  92.         /* ponemos en la ventana el nombre y el formato */
  93.         zxamnameformat(zxamfilepart(nombre),'PC')
  94.         zxamnoreload()
  95.         
  96.         exit
  97.         
  98.         end
  99.  
  100.  
  101.  
  102. /* al final de todo generamos un error, ya que ninguno de los bloques de */
  103. /* reconocimiento ha podido reconocer el formato */
  104.  
  105.     requestchoice 'title "ZXAM Script error..." body "Formato desconocido!!" gadgets "AARGH!"'
  106.  
  107.     if oldname='' then
  108.         zxamclearnameformat()
  109.     else
  110.         zxamnameformat(oldname,oldformat)
  111.     
  112.     exit
  113.